# 使用多阶段构建：先在带 Go SDK 的镜像中编译，再在精简镜像中运行
FROM golang:1.24.6 AS builder

LABEL authors="dunea"

# 设置工作目录
WORKDIR /src

# 复制 go.mod 和 go.sum 以利用模块缓存
COPY go.mod go.sum ./

# 下载依赖（利用缓存层）
RUN go mod download

# 复制项目源码
COPY . .

# 使用静态链接（可选）并交叉编译为 linux/amd64，可按需调整
ENV CGO_ENABLED=0
RUN GOOS=linux GOARCH=amd64 go build -trimpath -ldflags="-s -w" -o /out/pop3api ./


# 运行镜像：使用更小的基础镜像（alpine 或 scratch）
FROM alpine:3.19

LABEL authors="dunea"

# 创建运行用户，避免以 root 运行
RUN addgroup -S appgroup && adduser -S appuser -G appgroup

# 复制二进制文件
COPY --from=builder /out/pop3api /usr/local/bin/pop3api

# 设置权限并切换用户
RUN chown appuser:appgroup /usr/local/bin/pop3api
USER appuser

# 暴露应用端口（与 main.go 中 r.Run(":9000") 一致）
EXPOSE 9000

# 健康检查（可选）
HEALTHCHECK --interval=30s --timeout=3s --start-period=5s --retries=3 CMD nc -z localhost 8085 || exit 1

# 默认命令运行二进制
ENTRYPOINT ["/usr/local/bin/pop3api"]